package com.ljm.file.service;

import com.ljm.file.properties.BucketType;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * @Author: ChenHuaMing
 * @Date: 2020/9/28 10:41
 * @Description: 文件处理接口
 */
public interface FileService {
    /**
     * 上传公开文件
     * @param bucketType 空间类型
     * @param ossFileName 对象存储文件名称
     * @param inputStream 文件流
     */
    void fileUpload(BucketType bucketType, String ossFileName, InputStream inputStream);

    /**
     * 上传公开文件
     * @param bucketType 空间类型
     * @param storagePath 存储路径
     * @param ossFileName 对象存储文件名称
     * @param inputStream 文件流程
     */
    void fileUpload(BucketType bucketType,String storagePath, String ossFileName, InputStream inputStream);

    /**
     * 上传公开文件
     * @param bucketName 空间名称
     * @param storagePath 存储路径
     * @param ossFileName 对象存储文件名称
     * @param inputStream 文件流程
     */
    void fileUpload(String bucketName, String storagePath, String ossFileName, InputStream inputStream);

    /**
     * 下载文件
     * @param bucketType 空间类型
     * @param ossFileName 对象存储文件名称
     * @param filePath 文件存储位置（如果是临时文件,记得使用后删除哟）
     * @return
     */
    void downLoadObjectToFile(BucketType bucketType,String ossFileName,String filePath);

    /**
     * 下载文件
     * @param bucketType 空间类型
     * @param bucketType 空间类型
     * @param storagePath 存储路径
     * @param ossFileName 对象存储文件名称
     * @param filePath 文件存储位置（如果是临时文件,记得使用后删除哟）
     * @return
     */
    void downLoadObjectToFile(BucketType bucketType,String storagePath,String ossFileName,String filePath);

    /**
     * 下载文件
     * @param bucketName 空间名称
     * @param storagePath 存储路径
     * @param ossFileName 对象存储文件名称
     * @param filePath 文件存储位置（如果是临时文件,记得使用后删除哟）
     * @return
     */
    void downLoadObjectToFile(String bucketName,String storagePath,String ossFileName,String filePath);

    /**
     * 下载文件
     * @param bucketType 空间类型
     * @param ossFileName 对象存储文件名称
     * @param outputStream 输出流
     * @return
     */
    void downLoadObjectToOutputStream(BucketType bucketType, String ossFileName, OutputStream outputStream)throws IOException;

    /**
     * 下载文件
     * @param bucketType 空间类型
     * @param bucketType 空间类型
     * @param storagePath 存储路径
     * @param ossFileName 对象存储文件名称
     * @param outputStream 输出流
     * @return
     */
    void downLoadObjectToOutputStream(BucketType bucketType,String storagePath,String ossFileName, OutputStream outputStream)throws IOException;

    /**
     * 下载文件
     * @param bucketName 空间名称
     * @param storagePath 存储路径
     * @param ossFileName 对象存储文件名称
     * @param outputStream 输出流
     * @return
     */
    void downLoadObjectToOutputStream(String bucketName,String storagePath,String ossFileName, OutputStream outputStream) throws IOException;

    /**
     * 删除文件
     * @param bucketType 空间类型
     * @param ossFileName 对象存储文件名称
     */
    void deleteFile(BucketType bucketType,String ossFileName);

    /**
     * 删除文件
     * @param bucketType 空间类型
     * @param storagePath 存储路径
     * @param ossFileName 对象存储文件名称
     */
    void deleteFile(BucketType bucketType,String storagePath,String ossFileName);

    /**
     * 删除文件
     * @param bucketName 空间名称
     * @param ossFileName 对象存储文件名称
     */
    void deleteFile(String bucketName,String storagePath,String ossFileName);

    /**
     *  获取下载链接
     * @param bucketType 空间类型
     * @param ossFileName 对象存储文件名称
     * @param expirationTime 失效时间
     * @return 下载链接
     */
    String getDownLoadUrl(BucketType bucketType,String ossFileName,Long expirationTime);

    /**
     *  获取下载链接
     * @param bucketType 空间类型
     * @param storagePath 存储路径
     * @param ossFileName 对象存储文件名称
     * @param expirationTime 失效时间
     * @return 下载链接
     */
    String getDownLoadUrl(BucketType bucketType,String storagePath,String ossFileName,Long expirationTime);

    /**
     *  获取下载链接
     * @param bucketName 空间名称
     * @param storagePath 存储路径
     * @param ossFileName 对象存储文件名称
     * @param expirationTime 失效时间
     * @return 下载链接
     */
    String getDownLoadUrl(String bucketName,String storagePath,String ossFileName,Long expirationTime);

}
